package greetings

import "fmt"

func DeferFuncParameter() {
	var aInt = 1
	defer fmt.Println("defer 1:", aInt)
	aInt = 2
	defer fmt.Println("defer 2:", aInt)

	arr := [3]int{10, 30, 34}
	for inx, v := range arr {
		defer fmt.Println("for loop inx:", inx, " v is :", v)
	}

	for inx, v := range arr {
		defer func() {
			fmt.Println("for loop2 inx:", inx, " v is :", v)
		}()
	}

	defer printArray(&arr)

	arr[0] = 100

	a := foo()
	fmt.Println("测试defer中修改最终返回值foo：", a)
	fmt.Println("测试defer中修改最终返回值 foo2：", foo2(100))

	return
}

func printArray(array *[3]int) {
	for i := range array {
		fmt.Println("打印数组的值:", array[i])
	}
}

func foo() int {

	var i int
	i = 100
	defer func() {
		// 这里修改i的值，不会影响最终函数的返回值。
		i++
	}()

	return i
}

//TODO husd 这里要好好理解一下，这种情况会影响返回值。
func foo2(a int) (b int) {

	defer func() {
		//这种情况下，会影响返回值。
		b++
	}()

	return 0
}
